package com.business.web.spring;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import com.business.domain.T_contract;
import com.business.domain.T_news;
import com.business.service.T_contractService;
import com.business.service.T_newsService;
import com.common.utils.DateUtil;
import org.apache.log4j.Logger;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.business.domain.T_task_node_instance;
import com.easyworkflow.web.spring.WorkFlowController;

//import com.workflow.WorkFlowUtils;
import com.common.db.JsonVO;
import com.common.db.Pg;
import com.common.utils.BeanUtils;
import com.business.domain.T_contract_bill;
//import com.business.mapper.T_contract_billMapper;
import com.business.service.T_contract_billService;

@Controller
@RequestMapping("/batchController")

public class BatchController extends WorkFlowController {

    private static Logger log = Logger.getLogger(BatchController.class.getName());

    @Resource
    private T_contract_billService t_contract_billService;
    @Resource
    private T_contractService t_contractService;
    @Resource
    private T_newsService t_newsService;

    //@Autowired
    //private WorkFlowUtils workFlowUtils;

    //@Resource
    //private T_contract_billMapper mapper;
    //private int id;
    //private int[] ids;
    private Pg pg;

    //-------------------------------以下为定时任务相关代码----------------------------

    /**
     * cron是一个表达式 可以看下这篇h
     * 字段名              含义　　　　　　　　　　允许的值                        允许的特殊字符
     * seconds            秒                    0-59                            , - * /
     * minutes 　　　　　　 分                    0-59                            , - * /
     * hours              小时                　 0-23                            , - * /
     * daysOfMonth        日                    1-31                            , - * ? / L W C
     * months  　　　　　　 月                    1-12 or JAN-DEC                 , - * /
     * daysOfWeek         周几                　 1-7 or SUN-SAT                  , - * ? / L C #
     * --------------------------------------------------------------------------------------------
     * 使用案例：
     *    0 0 10,14,16 * * ? 每天上午10点，下午2点，4点
     * 　　0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
     * 　　0 0 12 ? * WED 表示每个星期三中午12点
     * 　　"0 0 12 * * ?" 每天中午12点触发
     * 　　"0 15 10 ? * *" 每天上午10:15触发
     * 　　"0 15 10 * * ?" 每天上午10:15触发
     * 　　"0 15 10 * * ? *" 每天上午10:15触发
     * 　　"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
     * 　　"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
     * 　　"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
     * 　　"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
     * 　　"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
     * 　　"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
     * 　　"0 15 10 15 * ?" 每月15日上午10:15触发
     * 　　"0 15 10 L * ?" 每月最后一日的上午10:15触发
     * 　　"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
     * 　　"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
     */

    //@Scheduled(cron = "0 0 22,23 * * ?")  //每天晚上22点，23点 执行
    public void fixedRate() {
        log.info("------test fixedRate = 3000 print!------");

    }

    //每天晚上21点 执行; 生成应收日期 = 7天后的数据；
    @Scheduled(cron = "0 0 21 * * ?")  //0 0/5 10 * * ?
    public void nightExec() {
        //执行7天即将到期预警:"电费/水费/物业费/租金" 7天后到期账单数据;
        billWarnList7Days();
        //执行当天未完成状态"任务"预警数据生成;
        gongdanUnFinish();
        // 执行当天未完成"工单"预警数据生成；
        renwuUnFinish();
    }

    /**
     * 执行当天未完成"工单"预警数据生成;
     */
    public void gongdanUnFinish() {
        try {
            log.info("------START 执行 ：：：当天未完成工单；：：：批量生成预警信息 定时任务, 每天晚上21点 执行 print!------");
            //1、待生成 预警数据读取；  状态： status=已处理， biztype = gongdan
            T_news t_news = new T_news();
            t_news.setCheck2("已处理");
            t_news.setBiztype("gongdan");
            t_news.setPageSize(100000);
            t_news.setStartNo(0);
            t_news.setEndNo(100000);
            List newsList = t_newsService.findAll(t_news);
            if(null!=newsList){
                Iterator it = newsList.iterator();
                while (null != it && it.hasNext()) {
                    t_news = (T_news) it.next();

                        T_news news = new T_news();
                        news.setTypes("预警");
                        news.setBiztype("Warn");
                        news.setCreattime(DateUtil.getCurrDateTimeStand());
                        news.setCreater("系统自动生成");
                        news.setTitle("工单"); //物业费、租金、水费、电费；

                        news.setStatus("待处理");
                        news.setExt1(t_news.getId().toString() ); //工单id/账单id/任务id
                        news.setExt2(t_news.getTitle() );  //工单编号/账单编号/任务名称
                        //news.setExt3(t_contract_bill.getExt2() +"-"+t_contract_bill.getExt3()); //楼栋-房号
                        news.setExt4(t_news.getCreattime()); //应收日期/工单录入时间/任务发布时间
                        //news.setExt5(t_contract_bill.getTotalprice().toString());  //应收金额;
                        news.setExt6(t_news.getExt6()); //业主租客/报修人/待处理人名称/；
                        news.setExt7("未完成工单预警");

                        int resrow = t_newsService.save(news);
                        if(resrow>0){
                            log.info("------批量生成预警待处理 工单 信息：编号=" + news.getId() );
                        }else{
                            log.info("------批量生成预警待处理 工单 信息：编号=" + news.getId() );
                        }

                } //end while;
            } //end if；
        } catch (Exception e) {
            e.printStackTrace();
            log.error("------批量  未完成工单预警 数据 出错error=" + e.toString());
        }
        log.info("------END 执行 ：：：未完成工单预警数据：：：批量生成预警信息 定时任务  ------");
    }

    /**
     * 执行当天未完成"任务"预警数据生成;
     */
    public void renwuUnFinish() {
        try {
            log.info("------START 执行 ：：：当天未完成入任务；：：：批量生成预警信息 定时任务, 每天晚上21点 执行 print!------");
            //1、待生成 预警数据读取；  状态： status=已处理， biztype = gongdan
            T_news t_news = new T_news();
            t_news.setCheck2("处理完成");
            t_news.setBiztype("Renwu");
            t_news.setPageSize(100000);
            t_news.setStartNo(0);
            t_news.setEndNo(100000);
            List newsList = t_newsService.findAll(t_news);
            if(null!=newsList){
                Iterator it = newsList.iterator();
                while (null != it && it.hasNext()) {
                    t_news = (T_news) it.next();

                    T_news news = new T_news();
                    news.setTypes("预警");
                    news.setBiztype("Warn");
                    news.setCreattime(DateUtil.getCurrDateTimeStand());
                    news.setCreater("系统自动生成");
                    news.setTitle("任务"); //物业费、租金、水费、电费；

                    news.setStatus("待处理");
                    news.setExt1(t_news.getId().toString() ); //工单id/账单id/任务id
                    news.setExt2(t_news.getTitle() );  //工单编号/账单编号/任务名称
                    //news.setExt3(t_contract_bill.getExt2() +"-"+t_contract_bill.getExt3()); //楼栋-房号
                    news.setExt4(t_news.getCreattime()); //应收日期/工单录入时间/任务发布时间
                    //news.setExt5(t_contract_bill.getTotalprice().toString());  //应收金额;
                    news.setExt6(t_news.getChecker()); //业主租客/报修人/待处理人名称/；
                    news.setExt7("未完成任务预警");

                    int resrow = t_newsService.save(news);
                    if(resrow>0){
                        log.info("------批量生成预警待处理 任务 信息：编号=" + news.getId() );
                    }else{
                        log.info("------批量生成预警待处理 任务 信息：编号=" + news.getId() );
                    }

                } //end while;
            } //end if；
        } catch (Exception e) {
            e.printStackTrace();
            log.error("------批量  未完成任务预警 数据 出错error=" + e.toString());
        }
        log.info("------END 执行 ：：：未完成任务预警数据：：：批量生成预警信息 定时任务  ------");
    }

    /**
     * 执行7天即将到期预警:电费/水费/物业费/租金 7天后到期账单数据;
     */
    public void billWarnList7Days() {
        try {
            log.info("------START 执行 ：：：电费/水费/物业费/租金 7天后到期账单数据；：：：账单批量生成预警信息 定时任务, 每天晚上22点，23点 执行 print!------");
            //1、待生成 预警数据读取；
            T_contract_bill t_contract_bill = new T_contract_bill();
            //t_contract_billDF.setBilltype("电费");
            //t_contract_billDF.setBiztype("wuye");
            t_contract_bill.setStatus("已生效");
            t_contract_bill.setSftype("收款");
            t_contract_bill.setPageSize(100000);
            t_contract_bill.setStartNo(0);
            t_contract_bill.setEndNo(100000);
            List t_contract_billList = t_contract_billService.findAll(t_contract_bill);
            if(null!=t_contract_billList){
                Iterator it = t_contract_billList.iterator();
                while (null != it && it.hasNext()) {
                    t_contract_bill = (T_contract_bill) it.next();
                    //获取当前日期， yyyy-mm-dd格式；
                    String scurrentDate = DateUtil.get10CurrDate();
                    //yyyy-MM-dd,转成一个Date;
                    Date currentDate = DateUtil.parseByDefaultDatePattern(scurrentDate);
                    //账单应收日期
                    String spayday = t_contract_bill.getPayday();
                    //yyyy-MM-dd,转成一个Date;
                    Date payday = DateUtil.parseByDefaultDatePattern(spayday);
                    //如果当前日期 +1 天 = 应付日期；
                    Date shouldPayday = DateUtil.addDay(currentDate , 7);
                    //如果当前日期 +1 天 = 应付日期； 说明：明天就是应该收款日，需要今晚生成预警信息，生成后工作人员明天上班第一时间可以看到；
                    String temppayday = DateUtil.format(payday,"yyyy-MM-dd");
                    String tempshouldPayday = DateUtil.format(shouldPayday,"yyyy-MM-dd");
                    log.info("======payday="+temppayday+";shouldPayday="+tempshouldPayday+";payday == shouldPayday?"+(temppayday == tempshouldPayday));

                    if(temppayday.equals(tempshouldPayday) ){
                        T_news news = new T_news();
                        news.setTypes("预警");
                        news.setBiztype("Warn");
                        news.setCreattime(DateUtil.getCurrDateTimeStand());
                        news.setCreater("系统自动生成");
                        news.setTitle(t_contract_bill.getBilltype()); //物业费、租金、水费、电费；
                        news.setNewdate(shouldPayday.toString());
                        news.setStatus("待处理");
                        news.setExt1(t_contract_bill.getBillid().toString()); //账单id
                        news.setExt2(t_contract_bill.getBillno());  //账单编号
                        news.setExt3(t_contract_bill.getExt2() +"-"+t_contract_bill.getExt3()); //楼栋-房号
                        news.setExt4(t_contract_bill.getPayday()); //应收日期;
                        news.setExt5(t_contract_bill.getTotalprice().toString());  //应收金额;
                        news.setExt6(t_contract_bill.getExt1()); //公司名称；
                        news.setExt7("提前7天预警");

                        int resrow = t_newsService.save(news);
                        if(resrow>0){
                            log.info("------批量生成预警待处理账单信息：账单编号=" + news.getExt2() + ",楼栋-房号=" + news.getExt3() +",应收日期="+news.getExt4()+"，应收金额="+news.getExt5()+",业主/租客="+news.getExt6());
                        }else{
                            log.info("------批量生成预警待处理账单信息：账单编号=" + news.getExt2() + ",楼栋-房号=" + news.getExt3() +",应收日期="+news.getExt4()+"，应收金额="+news.getExt5()+",业主/租客="+news.getExt6()+"数据失败，更新到数据记录数=0！");
                        }
                    }
                } //end while;
            } //end if；
        } catch (Exception e) {
            e.printStackTrace();
            log.error("------批量 生成电费/水费/物业费/租金预警信息 7天后天到期账单数据 出错error=" + e.toString());
        }
        log.info("------END 执行 ：：：电费/水费/物业费/租金 7天后到期账单数据：：：账单批量生成预警信息 定时任务  ------");
    }

    //每天晚上22点， 执行; 生成应收日期 = 3天后的数据；
    @Scheduled(cron = "0 0 22 * * ?")  //0 0/5 9 * * ?
    public void billWarnList3Days() {
        try {
            log.info("------START 执行 ：：：电费/水费/物业费/租金 3天后到期账单数据；：：：账单批量生成预警信息 定时任务, 每天晚上22点，23点 执行 print!------");
            //1、待生成 预警数据读取；
            T_contract_bill t_contract_bill = new T_contract_bill();
            //t_contract_billDF.setBilltype("电费");
            //t_contract_billDF.setBiztype("wuye");
            t_contract_bill.setStatus("已生效");
            t_contract_bill.setSftype("收款");
            t_contract_bill.setPageSize(100000);
            t_contract_bill.setStartNo(0);
            t_contract_bill.setEndNo(100000);
            List t_contract_billList = t_contract_billService.findAll(t_contract_bill);
            if(null!=t_contract_billList){
                Iterator it = t_contract_billList.iterator();
                while (null != it && it.hasNext()) {
                    t_contract_bill = (T_contract_bill) it.next();
                    //获取当前日期， yyyy-mm-dd格式；
                    String scurrentDate = DateUtil.get10CurrDate();
                    //yyyy-MM-dd,转成一个Date;
                    Date currentDate = DateUtil.parseByDefaultDatePattern(scurrentDate);
                    //账单应收日期
                    String spayday = t_contract_bill.getPayday();
                    //yyyy-MM-dd,转成一个Date;
                    Date payday = DateUtil.parseByDefaultDatePattern(spayday);
                    //如果当前日期 +3 天 = 应付日期；
                    Date shouldPayday = DateUtil.addDay(currentDate , 3);
                    //如果当前日期 +3 天 = 应付日期； 说明：3天后就是应该收款日，需要今晚生成预警信息，生成后工作人员明天上班第一时间可以看到；
                    String temppayday = DateUtil.format(payday,"yyyy-MM-dd");
                    String tempshouldPayday = DateUtil.format(shouldPayday,"yyyy-MM-dd");
                    log.info("======payday="+temppayday+";shouldPayday="+tempshouldPayday+";payday == shouldPayday?"+(temppayday == tempshouldPayday));

                    if(temppayday.equals(tempshouldPayday) ){
                        T_news news = new T_news();
                        news.setTypes("预警");
                        news.setBiztype("Warn");
                        news.setCreattime(DateUtil.getCurrDateTimeStand());
                        news.setCreater("系统自动生成");
                        news.setTitle(t_contract_bill.getBilltype()); //物业费、租金、水费、电费；
                        news.setNewdate(shouldPayday.toString());
                        news.setStatus("待处理");
                        news.setExt1(t_contract_bill.getBillid().toString()); //账单id
                        news.setExt2(t_contract_bill.getBillno());  //账单编号
                        news.setExt3(t_contract_bill.getExt2() +"-"+t_contract_bill.getExt3()); //楼栋-房号
                        news.setExt4(t_contract_bill.getPayday()); //应收日期;
                        news.setExt5(t_contract_bill.getTotalprice().toString());  //应收金额;
                        news.setExt6(t_contract_bill.getExt1()); //公司名称；
                        news.setExt7("提前3天预警");

                        int resrow = t_newsService.save(news);
                        if(resrow>0){
                            log.info("------批量生成预警待处理账单信息：账单编号=" + news.getExt2() + ",楼栋-房号=" + news.getExt3() +",应收日期="+news.getExt4()+"，应收金额="+news.getExt5()+",业主/租客="+news.getExt6());
                        }else{
                            log.info("------批量生成预警待处理账单信息：账单编号=" + news.getExt2() + ",楼栋-房号=" + news.getExt3() +",应收日期="+news.getExt4()+"，应收金额="+news.getExt5()+",业主/租客="+news.getExt6()+"数据失败，更新到数据记录数=0！");
                        }
                    }
                } //end while;
            } //end if；
        } catch (Exception e) {
            e.printStackTrace();
            log.error("------批量 生成电费/水费/物业费/租金预警信息 3天后到期账单数据 出错error=" + e.toString());
        }
        log.info("------END 执行 ：：：电费/水费/物业费/租金 3天后到期账单数据：：：账单批量生成预警信息 定时任务  ------");
    }

    //每天晚上23点， 执行; 生成应收日期 = 1天后的数据；
    //"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
    @Scheduled(cron = "0 0 23 * * ?")  //0 0 9 * * ?
    public void billWarnList1Days() {
        try {
            log.info("------START 执行 ：：：电费/水费/物业费/租金 1天后到期账单数据；：：：账单批量生成预警信息 定时任务, 每天晚上22点，23点 执行 print!------");
            //1、待生成 预警数据读取；
            T_contract_bill t_contract_bill = new T_contract_bill();
            //t_contract_billDF.setBilltype("电费");
            //t_contract_billDF.setBiztype("wuye");
            t_contract_bill.setStatus("已生效");
            t_contract_bill.setSftype("收款");
            t_contract_bill.setPageSize(100000);
            t_contract_bill.setStartNo(0);
            t_contract_bill.setEndNo(100000);
            List t_contract_billList = t_contract_billService.findAll(t_contract_bill);
            if(null!=t_contract_billList){
                Iterator it = t_contract_billList.iterator();
                while (null != it && it.hasNext()) {
                    t_contract_bill = (T_contract_bill) it.next();
                    //获取当前日期， yyyy-mm-dd格式；
                    String scurrentDate = DateUtil.get10CurrDate();
                    //yyyy-MM-dd,转成一个Date;
                    Date currentDate = DateUtil.parseByDefaultDatePattern(scurrentDate);
                    //账单应收日期
                    String spayday = t_contract_bill.getPayday();
                    //yyyy-MM-dd,转成一个Date;
                    Date payday = DateUtil.parseByDefaultDatePattern(spayday);
                    //如果当前日期 +3 天 = 应付日期；
                    Date shouldPayday = DateUtil.addDay(currentDate , 1);
                    //如果当前日期 +3 天 = 应付日期； 说明：3天后就是应该收款日，需要今晚生成预警信息，生成后工作人员明天上班第一时间可以看到；
                    String temppayday = DateUtil.format(payday,"yyyy-MM-dd");
                    String tempshouldPayday = DateUtil.format(shouldPayday,"yyyy-MM-dd");
                    log.info("======payday="+temppayday+";shouldPayday="+tempshouldPayday+";payday == shouldPayday?"+(temppayday == tempshouldPayday));

                    if(temppayday.equals(tempshouldPayday) ){
                        T_news news = new T_news();
                        news.setTypes("预警");
                        news.setBiztype("Warn");
                        news.setCreattime(DateUtil.getCurrDateTimeStand());
                        news.setCreater("系统自动生成");
                        news.setTitle(t_contract_bill.getBilltype()); //物业费、租金、水费、电费；
                        news.setNewdate(shouldPayday.toString());
                        news.setStatus("待处理");
                        news.setExt1(t_contract_bill.getBillid().toString()); //账单id
                        news.setExt2(t_contract_bill.getBillno());  //账单编号
                        news.setExt3(t_contract_bill.getExt2() +"-"+t_contract_bill.getExt3()); //楼栋-房号
                        news.setExt4(t_contract_bill.getPayday()); //应收日期;
                        news.setExt5(t_contract_bill.getTotalprice().toString());  //应收金额;
                        news.setExt6(t_contract_bill.getExt1()); //公司名称；
                        news.setExt7("提前1天预警");

                        int resrow = t_newsService.save(news);
                        if(resrow>0){
                            log.info("------批量生成预警待处理账单信息：账单编号=" + news.getExt2() + ",楼栋-房号=" + news.getExt3() +",应收日期="+news.getExt4()+"，应收金额="+news.getExt5()+",业主/租客="+news.getExt6());
                        }else{
                            log.info("------批量生成预警待处理账单信息：账单编号=" + news.getExt2() + ",楼栋-房号=" + news.getExt3() +",应收日期="+news.getExt4()+"，应收金额="+news.getExt5()+",业主/租客="+news.getExt6()+"数据失败，更新到数据记录数=0！");
                        }
                    }
                } //end while;
            } //end if；
        } catch (Exception e) {
            e.printStackTrace();
            log.error("------批量 生成电费/水费/物业费/租金预警信息 1天后到期账单数据 出错error=" + e.toString());
        }
        log.info("------END 执行 ：：：电费/水费/物业费/租金 1天后到期账单数据：：：账单批量生成预警信息 定时任务  ------");
    }

    //电费、水费导入后自动生效， 每 1000毫秒秒 * 60 * 30 = 30分钟执行一次，前面执行完后才会触发；
    @Scheduled(fixedDelay = 1000 * 60 * 30)
    public void fixedDelay() {
        try {
            log.info("------START 执行 ：：：电费：：：自动生成账单任务 定时任务, fixedDelay = 每 1000毫秒秒 * 1 * 60 = 1分钟 print!------");
            //说明、执行水费电费生成；根据导入的水费电费月初月末读数； 按照楼栋房号 * 物业合同中水电基础单价；更新到totalamount字段；

            //1.1、待生成电费数据读取；
            T_contract_bill t_contract_billDF = new T_contract_bill();
            t_contract_billDF.setBilltype("电费");
            t_contract_billDF.setBiztype("wuye");
            t_contract_billDF.setStatus("待生效");
            t_contract_billDF.setPageSize(10000);
            t_contract_billDF.setStartNo(0);
            t_contract_billDF.setEndNo(10000);
            List t_contract_billList = t_contract_billService.findAll(t_contract_billDF);
            if(null!=t_contract_billList){
                Iterator it = t_contract_billList.iterator();
                T_contract t_contractDF = new T_contract();
                while (null != it && it.hasNext()) {
                    t_contract_billDF = (T_contract_bill) it.next();
                    t_contractDF.setBuildingname(t_contract_billDF.getExt2());
                    t_contractDF.setHousename(t_contract_billDF.getExt3());
                    t_contractDF.setStatus("已生效"); //已生效合同信息；
                    t_contractDF.setPageSize(100);
                    t_contractDF.setStartNo(0);
                    t_contractDF.setEndNo(100);
                    //1.2、合同中电费单价读取
                    List t_contractList = t_contractService.findAll(t_contractDF);
                    if (t_contractList != null && t_contractList.size() > 0) {
                        t_contractDF = (T_contract) t_contractList.get(0);
                        //t_contract.energytprice 水费单价； t_contract.contractprice 电费单价；
                        String dfyc = t_contract_billDF.getExt5(); //电费月初数字
                        String dfym = t_contract_billDF.getExt6(); //电费月末数字

                        //1.3、加工电费数据
                        Double dfPrice = t_contractDF.getContractprice(); //电费单价
                        //加法 add()函数 、减法subtract()函数、乘法multiply()函数、除法divide()函数；
                        String totalSHMoney = new BigDecimal(dfym).subtract(new BigDecimal(dfyc)).multiply(new BigDecimal(dfPrice.toString())).setScale(2).toString();
                        t_contract_billDF.setTotalprice(new Double(totalSHMoney));
                        t_contract_billDF.setExt1(t_contractDF.getConpanyname()); //企业名称
                        t_contract_billDF.setContractno(t_contractDF.getContractno()); //合同号
                        t_contract_billDF.setExt4(dfPrice.toString()); //单价
                        t_contract_billDF.setStatus("已生效");

                        //1.4、更新电费数据
                        int resrow = t_contract_billService.update(t_contract_billDF);
                        if(resrow>0){
                            log.info("------批量更新电费数据对应楼栋=" + t_contractDF.getBuildingname() + ",房号=" + t_contractDF.getHousename() +",电费月初数字="+dfyc+"，电费月末数字="+dfym+",单价="+dfPrice+ "，本期电费总金额="+totalSHMoney);
                        }else{
                            log.error("------批量更新电费数据对应楼栋=" + t_contractDF.getBuildingname() + ",房号=" + t_contractDF.getHousename() +",电费月初数字="+dfyc+"，电费月末数字="+dfym+",单价="+dfPrice+ "，本期电费总金额="+totalSHMoney+"数据失败，更新到数据记录数=0！");
                        }
                    } else {
                        log.error("------查询电费数据对应楼栋=" + t_contractDF.getBuildingname() + ",房号=" + t_contractDF.getHousename() + "数据没有，请确认导入该楼栋房号电费数据是否正确!");
                    }
                } //end while;
            } //end if；
            log.info("------END 执行 ：：：电费：：：自动生成账单任务 定时任务  ------");

            log.info("------START 执行 ：：：水费：：：自动生成账单任务 定时任务, fixedDelay = 每 1000毫秒秒 * 1 * 60 = 1分钟 print!------");
            //2.1、待生成水费数据读取；
            T_contract_bill t_contract_billSF = new T_contract_bill();
            t_contract_billSF.setBilltype("水费");
            t_contract_billSF.setBiztype("wuye");
            t_contract_billSF.setStatus("待生效");
            t_contract_billSF.setPageSize(10000);
            t_contract_billSF.setStartNo(0);
            t_contract_billSF.setEndNo(10000);
            List t_contract_billListSF = t_contract_billService.findAll(t_contract_billSF);
            if(null!=t_contract_billListSF){
                Iterator itSF = t_contract_billListSF.iterator();
                T_contract t_contractSF = new T_contract();
                while (null != itSF && itSF.hasNext()) {
                    t_contract_billSF = (T_contract_bill) itSF.next();
                    t_contractSF.setBuildingname(t_contract_billSF.getExt2());
                    t_contractSF.setHousename(t_contract_billSF.getExt3());
                    t_contractSF.setStatus("已生效"); //已生效合同，多个生效合同只选最新的一个；
                    t_contractSF.setPageSize(100);
                    t_contractSF.setStartNo(0);
                    t_contractSF.setEndNo(100);
                    //2.2、合同中水费单价读取
                    List t_contractListSF = t_contractService.findAll(t_contractSF);
                    if (t_contractListSF != null && t_contractListSF.size() > 0) {
                        t_contractSF = (T_contract) t_contractListSF.get(0);
                        //t_contractSF.energytprice 水费单价； t_contractSF.contractprice 电费单价；
                        String sfyc = t_contract_billSF.getExt5(); //水费月初数字
                        String sfym = t_contract_billSF.getExt6(); //水费月末数字

                        //2.3、加工水费数据
                        Double sfPrice = t_contractSF.getEnergytprice(); //水费单价
                        //加法 add()函数 、减法subtract()函数、乘法multiply()函数、除法divide()函数；
                        String totalSHMoney = new BigDecimal(sfym).subtract(new BigDecimal(sfyc)).multiply(new BigDecimal(sfPrice.toString())).setScale(2).toString();
                        t_contract_billSF.setTotalprice(new Double(totalSHMoney));
                        t_contract_billSF.setExt1(t_contractSF.getConpanyname()); //企业名称
                        t_contract_billSF.setContractno(t_contractSF.getContractno()); //合同号
                        t_contract_billSF.setExt4(sfPrice.toString()); //单价
                        t_contract_billSF.setStatus("已生效");

                        //2.4、更新水费数据
                        int resrow = t_contract_billService.update(t_contract_billSF);
                        if(resrow>0){
                            log.info("------批量更新水费数据对应楼栋=" + t_contractSF.getBuildingname() + ",房号=" + t_contractSF.getHousename() +",水费月初数字="+sfyc+"，水费月末数字="+sfym+",单价="+sfPrice+ "，本期水费总金额="+totalSHMoney);
                        }else{
                            log.error("------批量更新水费数据对应楼栋=" + t_contractSF.getBuildingname() + ",房号=" + t_contractSF.getHousename() +",水费月初数字="+sfyc+"，水费月末数字="+sfym+",单价="+sfPrice+ "，本期水费总金额="+totalSHMoney+"数据失败，更新到数据记录数=0！");
                        }
                    } else {
                        log.error("------查询水费数据对应楼栋=" + t_contractSF.getBuildingname() + ",房号=" + t_contractSF.getHousename() + "数据没有，请确认导入该楼栋房号水费数据是否正确!");
                    }
                } //end while;
            } //end if；

        } catch (Exception e) {
            e.printStackTrace();
            log.error("------批量计算水费账单数据出错error=" + e.toString());
        }
        log.info("------END 执行 ：：：水费：：：自动生成账单任务 定时任务  ------");

    }

    //  每隔5分钟执行一次：0 0/5 * * * ?
    @Scheduled(cron = "0 0/5 * * * ?")
    public void cron() {
        log.info("------test croncron = \"* /5 * * *  ?  print!------");
        //执行当天未完成状态"任务"预警数据生成;
        //gongdanUnFinish();
        // 执行当天未完成"工单"预警数据生成；
        //renwuUnFinish();
    }

}









